草庐IT

Java HotSpot 枚举开销

全部标签

c++ - 是否可以使用成员枚举来专门化模板?

structBar{enum{Special=4};};templatestructFoo{};templatestructFoo{};用法:Fooaa;使用gcc4.1.2编译失败它提示使用T::Special来对Foo进行部分特化。如果Special是一个类,则解决方案将是它前面的类型名。枚举(或整数)是否有与之等效的东西? 最佳答案 因为C++不允许explained由Prasoon提供,因此另一种解决方案是使用EnumToType类模板,structBar{enum{Special=4};};templatestructEn

c++ - 是否可以使用成员枚举来专门化模板?

structBar{enum{Special=4};};templatestructFoo{};templatestructFoo{};用法:Fooaa;使用gcc4.1.2编译失败它提示使用T::Special来对Foo进行部分特化。如果Special是一个类,则解决方案将是它前面的类型名。枚举(或整数)是否有与之等效的东西? 最佳答案 因为C++不允许explained由Prasoon提供,因此另一种解决方案是使用EnumToType类模板,structBar{enum{Special=4};};templatestructEn

c++ - GCC 中的 std::string 实现及其短字符串的内存开销

我目前正在为低内存平台开发一个应用程序,该应用程序需要一个包含许多短字符串(>100,000个字符串,每个字符串包含4-16个字符)的std::set。我最近将此集合从std::string转换为constchar*以节省内存,我想知道我是否真的避免了每个字符串的所有开销。我尝试使用以下方法:std::stringsizeTest="testString";std::cout但它只是给了我一个4个字节的输出,表明该字符串包含一个指针。我很清楚字符串在内部将数据存储在char*中,但我认为字符串类会产生额外的开销。std::string的GCC实现是否比sizeof(std::strin

c++ - GCC 中的 std::string 实现及其短字符串的内存开销

我目前正在为低内存平台开发一个应用程序,该应用程序需要一个包含许多短字符串(>100,000个字符串,每个字符串包含4-16个字符)的std::set。我最近将此集合从std::string转换为constchar*以节省内存,我想知道我是否真的避免了每个字符串的所有开销。我尝试使用以下方法:std::stringsizeTest="testString";std::cout但它只是给了我一个4个字节的输出,表明该字符串包含一个指针。我很清楚字符串在内部将数据存储在char*中,但我认为字符串类会产生额外的开销。std::string的GCC实现是否比sizeof(std::strin

c++ - 命名空间中的枚举

这样做有没有意义:namespacestatus{enumstatus{ok,error};}并像那样使用它status::ok或者我应该这样做:enumstatus{status_ok,status_error};并像这样使用它status_ok?更新:使用C++11,您现在应该这样做:enumclassstatus{ok,error};并像这样使用:status::ok 最佳答案 我个人不喜欢第二种变体,因为status_部分对我来说似乎是多余的。以前的版本避免了这个问题,但是有一个类型status::status看起来也很奇怪

c++ - 命名空间中的枚举

这样做有没有意义:namespacestatus{enumstatus{ok,error};}并像那样使用它status::ok或者我应该这样做:enumstatus{status_ok,status_error};并像这样使用它status_ok?更新:使用C++11,您现在应该这样做:enumclassstatus{ok,error};并像这样使用:status::ok 最佳答案 我个人不喜欢第二种变体,因为status_部分对我来说似乎是多余的。以前的版本避免了这个问题,但是有一个类型status::status看起来也很奇怪

c++ - C/C++ 创建一个带有负值的枚举,而不必对其编号

例如在C/C++中,我会得到以下代码:typedefenumfruits{apple,banana,lemon,orange}fruit_t;相当于:typedefenumfruits{apple=0,banana=1,lemon=2,orange=3}fruit_t;但是,我希望这些值是负数,这样它们就不会与其他任何东西发生冲突。我可以这样做:typedefenumfruits{apple=-1,banana=-2,lemon=-3,orange=-4}fruit_t;但是如果我想添加另一个水果,我必须分配另一个值,如果我在中间放一个,我必须重新编号它的大部分。有没有更简单的方法?

c++ - C/C++ 创建一个带有负值的枚举,而不必对其编号

例如在C/C++中,我会得到以下代码:typedefenumfruits{apple,banana,lemon,orange}fruit_t;相当于:typedefenumfruits{apple=0,banana=1,lemon=2,orange=3}fruit_t;但是,我希望这些值是负数,这样它们就不会与其他任何东西发生冲突。我可以这样做:typedefenumfruits{apple=-1,banana=-2,lemon=-3,orange=-4}fruit_t;但是如果我想添加另一个水果,我必须分配另一个值,如果我在中间放一个,我必须重新编号它的大部分。有没有更简单的方法?

c++ - 可以根据同一枚举类型中的其他枚举数来定义枚举数吗?

出于好奇,我正在试验这个:enumRxqType{A=(1枚举器C和D是根据早期的枚举器定义的。这是不寻常的,所以我不确定它是否安全。我无法通过Google找到有关它的示例(尽管可能会忽略)。当我在VisualC++2013和MinGW上printf或coutC和D似乎没问题.但我担心它是否符合标准,以及它是否会触发未定义的行为。谁能回答我对标准一致性和未定义行为的担忧?还有什么我需要担心的吗? 最佳答案 enumRxqType{A=(1在C和C++中这是有效的。对于C:(C11,6.2.1p7)"Eachenumerationco

c++ - 可以根据同一枚举类型中的其他枚举数来定义枚举数吗?

出于好奇,我正在试验这个:enumRxqType{A=(1枚举器C和D是根据早期的枚举器定义的。这是不寻常的,所以我不确定它是否安全。我无法通过Google找到有关它的示例(尽管可能会忽略)。当我在VisualC++2013和MinGW上printf或coutC和D似乎没问题.但我担心它是否符合标准,以及它是否会触发未定义的行为。谁能回答我对标准一致性和未定义行为的担忧?还有什么我需要担心的吗? 最佳答案 enumRxqType{A=(1在C和C++中这是有效的。对于C:(C11,6.2.1p7)"Eachenumerationco